Skip to main content

路径预处理功能块的实现

参见 CNC14_PathPreprocessing.project 的安装目录中的示例项目 CODESYS 下面 ..\CODESYS SoftMotion\Examples

该示例项目展示了如何实现新的路径预处理功能块。

路径预处理通常用于修改从 G 代码中读取的路径。这允许实现刀具半径校正或拐角平滑等功能。但是,也可以将特定计算机或应用程序的特定功能集成为路径预处理

有关路径预处理的更多信息,请参阅以下内容: 路径预处理和队列大小

有关如何使用路径预处理功能块的示例,请参阅以下内容: CNC实例03:在线进行路径预处理

限制切线变化

该示例显示了 2D 切割应用程序。应使用刀子沿着 G 代码定义的路径进行切割。这个 SMC_TRAFO_GantryCutter2 变换用于根据路径的当前切线来确定刀的角度。

挑战在于刀具不能旋转得太快,否则切口将不干净。在示例项目中,通过新创建的路径预处理功能块解决了刀具角速度的限制 LimitTangentVelocity。它改变路径上的进给速率,使切线的变化速度不超过可配置的最大值

G 代码是一个带有平滑边角的简单矩形。

_sm_img_example_preprocessing_function_block1.png

轨迹显示了执行结果:C 轴的速度以橙色显示,它对应于刀的旋转速度。按照规定,它限制为 45°/s。

_sm_img_example_preprocessing_function_block2.png

应用程序的结构

该结构是数控应用的典型结构。G 代码在后台任务中读取,路径预处理也在此处进行。插值是在总线任务中执行的

这个 LimitTangentVelocity 功能块显示路径预处理功能块的必要步骤和状态。

基本原理是函数块读取、处理,然后写入路径元素(类型 SMC_GEOINFO) 来自输入队列 (poqDataIn) 到输出队列 (poqDataOut)。元素将从输入队列中移除。

更改进给速率的逻辑位于第 102—138 行中。辅助功能 ComputeMaxCurvature 计算给定路径元素上可能出现的最大曲率。

// Our velocity limitation comes here. This modifies an element from the
// input queue and copies the modified element to the output queue.
// Finally, the element is removed from the input queue

m_geo := pgeo^; // Copy the element
 // Note: the feature flags set in the G-Code with G38/G39 can be queried
 // by reading pgo^.dwFeatureFlags, like this:
 IF (SHR(m_geo.dwFeatureFlags, featureFlag) AND 1) = 1 THEN
     // feature is turned on

     ok := ComputeMaxCurvature(m_geo, kappa=> kappa_max);
     IF NOT ok THEN
         // Curvature cannot be computed
         m_state := STATE_ERROR;
         ErrorID := SMC_INVALID_PARAMETER;
         OnExit();
         RETURN;
     END_IF

     // Compute maximum allowed path velocity based on maximum curvature
     // and maximum allowed angular velocity
     IF kappa_max = 0 THEN
         // No curvature, no limitation necessary
         vel := m_geo.dVel;
     ELSE
         vel := m_maxAngularVelocity_rad / kappa_max;
     END_IF

     IF velMin < 0 OR vel < velMin THEN
         velMin := vel;
     END_IF

     // Set new maximum velocity for the element
     m_geo.dVel := MIN(m_geo.dVel, vel);
 ELSE
     // feature is turned off
 END_IF

调试

  1. 生成应用程序并将其下载到控制器。

  2. 启动应用程序。

  3. 打开跟踪记录并将其下载到控制器。

  4. 写下值 TRUE 到变量 Path.bExecutePLC_PRG.bStart

  5. 您可以在跟踪中跟踪 G 代码的处理情况。